package com.zbkj.service.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zbkj.common.model.product.ProductAttrValue;
import com.zbkj.common.request.ProductAttrValueSearchRequest;
import com.zbkj.common.response.AiProductAttrValueResponse;
import com.zbkj.common.response.TransferOrderProductAttrValueResponse;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 商品属性值表 Mapper 接口
 * </p>
 *
 * @author HZW
 * @since 2022-07-19
 */
public interface ProductAttrValueDao extends BaseMapper<ProductAttrValue> {

    /**
     * 根据规格id查询规格的价格
     *
     * @param specIdList
     * @return
     */
    @MapKey("id")
    Map<Integer, ProductAttrValue> selectPriceByIdList(@Param("specIdList") List specIdList);

    /**
     * 查询规格信息
     *
     * @param specIdList
     * @return
     */
    @MapKey("id")
    Map<Integer, ProductAttrValue> selectListByIdList(@Param("specIdList") List specIdList);


    /**
     * 根据规格id查询所有当前所有规格价格之和
     *
     * @param specIdList
     * @return
     */
    BigDecimal selectSumPriceByIdList(@Param("specIdList") List specIdList);

    /**
     * 根据商品id查询商品下得规格
     *
     * @param idList
     * @return
     */
    List<AiProductAttrValueResponse> selectListByProductIdList(@Param("idList") List<Integer> idList);


    /**
     * 查询规格列表
     *
     * @param productAttrValueSearchRequest
     * @param productIdList
     * @return
     */
    List<TransferOrderProductAttrValueResponse> selectProductAttrValueList(@Param("productAttrValueSearchRequest") ProductAttrValueSearchRequest productAttrValueSearchRequest, @Param("storeId") Integer storeId, @Param("productIdList") List<Integer> productIdList,
                                                                           @Param("categoryIdList") List<Integer> categoryIdList);

    /**
     * 更新数量
     *
     * @param productSpecsId
     * @param transferNumber
     */
    void updateByIdAndTransferNumber(@Param("productSpecsId") Integer productSpecsId, @Param("roomId") Integer roomId, @Param("transferNumber") Integer transferNumber);

    /**
     * 根据id列表查询
     *
     * @param idList
     * @return
     */
    List<ProductAttrValue> getListByIdList(@Param("idList") List<Integer> idList);

    /**
     * 查询分类id
     * @param productAttrValueId
     * @return
     */
    Integer selectCategoryIdByProductAttrValueId(@Param("productAttrValueId") Integer productAttrValueId);
}
